﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using Entidades.Sistema.Venta;
using Mapping.Sistema.Venta;

namespace Modelo.Sistema.Venta
{
    public class CatalogoUnidad
    {
        
        private List<Unidad> Col_unidad;
        Int32 maxIdUnidadMedida;

        public CatalogoUnidad()
        {
            Col_unidad = Mapping.Sistema.Venta.MappingUnidad.ConsultarUnidades();
        }

        public ReadOnlyCollection<Unidad> ListarUnidad()
        {
            return Col_unidad.AsReadOnly();
        }

        public bool AgregarUnidad(Unidad oUnidad)
        {
            oUnidad.IdUnidadMedida = GetMayor();
            oUnidad.IdUnidadMedida = maxIdUnidadMedida + 1;
            Col_unidad.Add(oUnidad);
            return Mapping.Sistema.Venta.MappingUnidad.AgregarUnidad(oUnidad);
        }

        public bool EliminarUnidad(Unidad oUnidad)
        {
            Col_unidad.Remove(oUnidad);
            return Mapping.Sistema.Venta.MappingUnidad.EliminarUnidad(oUnidad);
        }
        public void ModificarUnidad(Unidad oUnidad)
        {
            Mapping.Sistema.Venta.MappingUnidad.ModificarUnidad(oUnidad);
            Col_unidad.RemoveAll(x => x.IdUnidadMedida == oUnidad.IdUnidadMedida);
            Col_unidad.Add(oUnidad);
        }
        public Unidad BuscarUnidad(int idUnid)
        {
            return this.Col_unidad.Find(unid => unid.IdUnidadMedida == idUnid);
        }
        public bool ValidarExistencia(Unidad oUnidad)
        {
            if (this.Col_unidad.Count(unid => unid.IdUnidadMedida == oUnidad.IdUnidadMedida) == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        public Int32 GetMayor()
        {
            if (Col_unidad.Count == 0) return 0;

                 maxIdUnidadMedida =
                (from und in Col_unidad
                 select und.IdUnidadMedida)
                .Max();

            return maxIdUnidadMedida;
        }
    }
}
